package io.renren.utils.sign;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.security.MessageDigest;

/**
 * Md5加密方法
 *
 * @author jeethink
 */
public class Md5Utils {
   private static final Logger log = LoggerFactory.getLogger(Md5Utils.class);

   private static byte[] md5(String s) {
      MessageDigest algorithm;
      try {
         algorithm = MessageDigest.getInstance("MD5");
         algorithm.reset();
         algorithm.update(s.getBytes("UTF-8"));
         byte[] messageDigest = algorithm.digest();
         return messageDigest;
      } catch (Exception e) {
         log.error("MD5 Error...", e);
      }
      return null;
   }

   private static final String toHex(byte hash[]) {
      if (hash == null) {
         return null;
      }
      StringBuffer buf = new StringBuffer(hash.length * 2);
      int i;

      for (i = 0; i < hash.length; i++) {
         if ((hash[i] & 0xff) < 0x10) {
            buf.append("0");
         }
         buf.append(Long.toString(hash[i] & 0xff, 16));
      }
      return buf.toString();
   }

   public static String hash(String s) {
      try {
         return new String(toHex(md5(s)).getBytes("UTF-8"), "UTF-8");
      } catch (Exception e) {
         log.error("not supported charset...{}", e);
         return s;
      }
   }
}
